import logging
from logging.handlers import RotatingFileHandler

def setup_logger(
    logger_name: str = "app_logger",
    log_file: str = "app.log",
    level: int = logging.INFO,
    max_bytes: int = 1024 * 1024 * 5,
    backup_count: int = 5
) -> logging.Logger:
    """
    配置并返回一个日志记录器。

    :param logger_name: 日志记录器的名称，默认为 "app_logger"
    :param log_file: 日志文件的路径，默认为 "app.log"
    :param level: 日志记录的级别，默认为 logging.INFO
    :param max_bytes: 日志文件的最大字节数，超过该大小将进行轮转，默认为 5MB
    :param backup_count: 轮转日志文件的备份数量，默认为 5 个
    :return: 配置好的日志记录器对象
    """
    # 创建一个日志记录器
    logger = logging.getLogger(logger_name)
    # 设置日志记录级别
    logger.setLevel(level)

    # 创建一个文件处理程序，用于将日志写入文件
    file_handler = RotatingFileHandler(log_file, maxBytes=max_bytes, backupCount=backup_count)
    # 设置文件处理程序的日志记录级别
    file_handler.setLevel(level)

    # 创建一个控制台处理程序，用于将日志输出到控制台
    console_handler = logging.StreamHandler()
    # 设置控制台处理程序的日志记录级别
    console_handler.setLevel(level)

    # 定义日志格式
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    # 为文件处理程序设置日志格式
    file_handler.setFormatter(formatter)
    # 为控制台处理程序设置日志格式
    console_handler.setFormatter(formatter)

    # 将文件处理程序添加到日志记录器
    logger.addHandler(file_handler)
    # 将控制台处理程序添加到日志记录器
    logger.addHandler(console_handler)

    return logger

# 创建一个默认的日志记录器实例
app_logger = setup_logger()
